home *** CD-ROM | disk | FTP | other *** search
/ Mac Power 1997 January / macpower199701.bin / AMUG / Programming_10 / WASTE 1.3a1.sit / WASTE 1.3a1 Distribution / WASTE 1.3a1 / WEUserSelectors.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-23  |  1.6 KB  |  76 lines  |  [TEXT/CWIE]

  1. /*
  2.  *    WEUserSelectors.c
  3.  *
  4.  *    WASTE PROJECT
  5.  *  Routines for hanging user-defined tagged data to a WASTE instance
  6.  *
  7.  *  Copyright (c) 1993-1996 Marco Piovanelli
  8.  *    All Rights Reserved
  9.  *
  10.  *  C port by Dan Crevier
  11.  *
  12.  */
  13.  
  14.  
  15. #include "WASTEIntf.h"
  16.  
  17. pascal OSErr WESetUserInfo ( WESelector tag, SInt32 userInfo, WEHandle hWE )
  18. {
  19.     Handle hUserInfo = ( * hWE ) -> hUserInfo ;
  20.     WEUserInfoEntry * pEntry ;
  21.     WEUserInfoEntry entry ;
  22.     OSErr err = noErr ;
  23.  
  24.     //    look for the specified tag in the user info array
  25.     for (    pEntry = ( WEUserInfoEntry * ) * hUserInfo ;
  26.             pEntry -> tag != 0 ;
  27.             pEntry ++ )
  28.     {
  29.         if ( pEntry -> tag == tag )
  30.         {
  31.             //    tag found: save the user info and return
  32.             pEntry -> info = userInfo ;
  33.             goto cleanup ;
  34.         }
  35.     }
  36.  
  37.     //    unknown tag: add a new entry at the end of the array
  38.     entry . tag = tag ;
  39.     entry . info = userInfo ;
  40.     if ( ( err = _WESplice ( hUserInfo, & entry, sizeof ( entry ), GetHandleSize ( hUserInfo ) - sizeof ( WEUserInfoEntry ) ) ) != noErr )
  41.     {
  42.         goto cleanup ;
  43.     }
  44.  
  45. cleanup :
  46.     return err ;
  47. }
  48.  
  49. pascal OSErr WEGetUserInfo ( WESelector tag, SInt32 * userInfo, WEHandle hWE )
  50. {
  51.     Handle hUserInfo = ( * hWE ) -> hUserInfo ;
  52.     WEUserInfoEntry * pEntry ;
  53.     OSErr err = weUndefinedSelectorErr ;
  54.  
  55.     //    look for the specified tag in the user info array
  56.     for (    pEntry = ( WEUserInfoEntry * ) * hUserInfo ;
  57.             pEntry -> tag != 0 ;
  58.             pEntry ++ )
  59.     {
  60.         if ( pEntry -> tag == tag )
  61.         {
  62.             //    tag found: set result code to noErr and break out of loop
  63.             err = noErr ;
  64.             break ;
  65.         }
  66.     }
  67.  
  68.     if ( userInfo != nil )
  69.     {
  70.         * userInfo = pEntry -> info ;
  71.     }
  72.  
  73. cleanup :
  74.     return err ;
  75. }
  76.